// @/api/system/user.ts

import { Alova } from '@/utils/http/alova/index';
import { http } from '@/utils/http/axios';
import { RequestEnum } from '@/enums/httpEnum';

// --- 数据模型定义 ---

export interface UserInfoModel {
  buttons: any[];
  info: any;
  role: any[];
}

/**
 * @description: 单个用户数据模型 (用于列表项)
 */
export interface UserItem {
  userId: number;
  nickname: string;
  avatar: string;
  phone: string;
  gender: boolean | undefined;
  status: number | undefined;
  created_time: string;
}

/**
 * @description: 用户列表接口返回模型 (分页)
 */
export interface UserDataModel {
  items: UserItem[]; // 用户列表数组
  total: number; // 总条数
  page: number; // 当前页码
  size: number; // 每页条数
}

// 定义新增/修改用户的请求参数模型
export interface AddUserParams {
  nickname: string;
  phone: string;
  gender: boolean;
  password: string;
}

export interface UpdateUserParams {
  userId: number;
  phone: string;
  nickname: string;
  gender: boolean;
  avatar: string;
  status: number;
}

/**
 * @description: 获取当前登录用户信息
 */
export function getUserInfoApi() {
  return http.request<UserInfoModel>({
    url: '/v1/user/currentInfo',
    method: RequestEnum.GET,
  });
}

/**
 * @description: 获取用户列表 (分页)
 */
export function getUserDatas(params: any) {
  return http.request<UserDataModel>({
    url: '/v1/admin/userDatas',
    method: RequestEnum.GET,
    params,
  });
}

/**
 * @description: 新增用户 (POST)
 * @param params - 用户信息，包含 nickname, phone, gender, password
 */
export function addUser(params: AddUserParams) {
  return http.request({
    url: '/v1/admin/userData', // 通常与获取列表的URL相同
    method: RequestEnum.POST,
    data: params, // POST请求使用 data 传递参数
  });
}

/**
 * @description: 修改用户信息 (PUT)
 * @param params - 要更新的用户信息，包含 nickname, gender
 */
export function updateUser(params: UpdateUserParams) {
  return http.request({
    url: '/v1/admin/userData',
    method: RequestEnum.PUT,
    data: params,
  });
}

/**
 * @description: 获取用户信息 (似乎与 getUserInfoApi 重复，保留原样)
 */
export function getUserInfo() {
  return Alova.Get<InResult>('/admin_info', {
    meta: {
      isReturnNativeResponse: true,
    },
  });
}

/**
 * @description: 用户登录
 */
export function login(params) {
  return Alova.Post<InResult>(
    '/login',
    {
      params,
    },
    {
      meta: {
        isReturnNativeResponse: true,
      },
    }
  );
}

/**
 * @description: 用户修改密码
 */
export function changePassword(params, uid) {
  return Alova.Post(`/user/u${uid}/changepw`, { params });
}

/**
 * @description: 用户登出
 */
export function logout(params) {
  return Alova.Post('/login/logout', {
    params,
  });
}
